JSON 메시지 유형

Anthropic
Claude에서 열기
이 강좌에 대해 질문하기
노트 복사
LLM용 전체 강좌 노트 복사

MCP(Model Context Protocol)는 클라이언트와 서버 간의 통신을 처리하기 위해 JSON 메시지를 사용합니다. 특히 스트리밍 가능한 HTTP 전송과 같은 다양한 전송 방식을 다룰 때, 이러한 메시지 유형을 이해하는 것은 MCP 활용에 있어 매우 중요합니다.

메시지 형식

모든 MCP 통신은 JSON 메시지를 통해 이루어집니다. 각 메시지 유형은 도구 호출, 사용 가능한 리소스 목록 조회, 시스템 이벤트 알림 전송 등 특정 목적을 가지고 있습니다.

대표적인 예시로, Claude가 MCP 서버가 제공하는 도구를 호출해야 할 때 클라이언트는 "Call Tool Request" 메시지를 전송합니다. 서버는 이 요청을 처리하고 도구를 실행한 후, 결과를 담은 "Call Tool Result" 메시지로 응답합니다.

MCP 명세

메시지 유형의 전체 목록은 GitHub의 공식 MCP 명세 저장소에 정의되어 있습니다. 이 명세는 Python 또는 TypeScript SDK와 같은 다양한 SDK 저장소와 별개로, MCP의 동작 방식에 대한 공식 기준으로 사용됩니다.

메시지 유형은 편의상 TypeScript로 작성되어 있습니다. 이는 TypeScript 코드로 실행되기 때문이 아니라, TypeScript가 데이터 구조와 타입을 명확하게 표현하는 데 적합하기 때문입니다.

메시지 카테고리

MCP 메시지는 크게 두 가지 카테고리로 나뉩니다:

요청-결과 메시지

이 메시지들은 항상 쌍으로 이루어집니다. 요청을 보내면 결과가 반환됩니다:

  • Call Tool RequestCall Tool Result
  • List Prompts Request → List Prompts Result
  • Read Resource Request → Read Resource Result
  • Initialize Request → Initialize Result

알림 메시지

이 메시지들은 이벤트를 알리는 단방향 메시지로, 응답이 필요하지 않습니다:

  • Progress Notification - 장시간 실행 작업의 진행 상황 업데이트
  • Logging Message Notification - 시스템 로그 메시지
  • Tool List Changed Notification - 사용 가능한 도구가 변경될 때
  • Resource Updated Notification - 리소스가 수정될 때

클라이언트 메시지 vs 서버 메시지

MCP 명세는 메시지를 발신자 기준으로 구분합니다:

클라이언트 메시지에는 클라이언트가 서버로 보내는 요청(예: 도구 호출)과 클라이언트가 전송하는 알림이 포함됩니다.

서버 메시지에는 서버가 클라이언트로 보내는 요청과 서버가 브로드캐스트하는 알림이 포함됩니다.

이것이 중요한 이유

서버가 클라이언트에게 메시지를 보낼 수 있다는 점은 다양한 전송 방식을 다룰 때 특히 중요합니다. 스트리밍 가능한 HTTP 전송과 같은 일부 전송 방식은 어떤 방향으로 어떤 유형의 메시지가 흐를 수 있는지에 대한 제한이 있습니다.

핵심은 MCP가 양방향 프로토콜로 설계되었다는 것입니다. 즉, 클라이언트와 서버 모두 통신을 시작할 수 있습니다. 이는 특정 사용 사례에 적합한 전송 방식을 선택할 때 매우 중요한 요소가 됩니다.